home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbdatabs / fstring.cpp < prev    next >
C/C++ Source or Header  |  1999-03-17  |  4KB  |  159 lines

  1. // ------------------------------- //
  2. // -------- Start of File -------- //
  3. // ------------------------------- //
  4. // ----------------------------------------------------------- // 
  5. // C++ Source Code File Name: string.cpp 
  6. // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
  7. // Produced By: Doug Gaer 
  8. // File Creation Date: 04/05/1996 
  9. // Date Last Modified: 03/17/1999
  10. // ----------------------------------------------------------- // 
  11. // ------------- Program Description and Details ------------- // 
  12. // ----------------------------------------------------------- // 
  13. /*
  14. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
  15. THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
  16. IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
  17. YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
  18. CORRECTION.
  19.  
  20. A simple fixed length (static) string class.
  21. */
  22. // ----------------------------------------------------------- // 
  23. #include <string.h>
  24. #include <iostream.h>
  25. #include <iomanip.h>
  26.  
  27. const unsigned Len = 25; // String length of the fixed string
  28.  
  29. // (F)ixed (S)tring class
  30. class FString 
  31. public:
  32.   FString() { Clear(); }
  33.   FString(char *s) { Clear(); Store(s); }
  34.   ~FString() { }    
  35.  
  36.   FString(const FString &s) { Copy(s); }
  37.  
  38.   FString &operator=(const FString &s) {
  39.     if(this != &s) Copy(s);
  40.     return *this;
  41.   }
  42.  
  43. public:
  44.   void Store(char *s);
  45.   void Clear();
  46.   void Copy(const FString &s);
  47.   char *c_str();
  48.   
  49. public:
  50.   friend int operator==(const FString &a, const FString &b) {
  51.     return strcmp(a.str, b.str) == 0;
  52.   }
  53.  
  54.   friend int operator<(const FString &a, const FString &b) {
  55.     return strcmp(a.str, b.str) < 0;
  56.   }
  57.  
  58.   friend int operator>(const FString &a, const FString &b) {
  59.     return strcmp(a.str, b.str) > 0;
  60.   }
  61.  
  62.   friend int operator!=(const FString &a, const FString &b) {
  63.     return strcmp(a.str, b.str) != 0;
  64.   }
  65.   
  66.   friend ostream &operator<<(ostream &os, const FString &s) {
  67.     return os.write(s.str, strlen(s.str));
  68.   }
  69.  
  70.   friend istream &operator>>(istream &os, FString &s) {
  71.     os >> setw(strlen(s.str)) >> s.str;
  72.     return os;
  73.   }
  74.            
  75. private:
  76.   char str[Len];
  77. };
  78.  
  79. void FString::Clear()
  80. {
  81.   for(unsigned i = 0; i < Len; i++)
  82.     str[i] = 0;
  83. }
  84.  
  85. void FString::Store(char *s)
  86. {
  87.   char *buf = new char[Len];
  88.   buf[Len] = '\0';
  89.   memcpy(buf, s, Len);
  90.   for(unsigned i = 0; i < Len; i++)
  91.     str[i] = buf[i];
  92. }
  93.  
  94. void FString::Copy(const FString &s)
  95. {
  96.   Clear();
  97.  
  98.   for(unsigned i = 0; i < Len; i++)
  99.     str[i] = s.str[i];
  100. }
  101.  
  102. char *FString::c_str()
  103. {
  104.   char *buf = new char[Len];
  105.   buf[Len] = '\0';
  106.   memcpy(buf, str, Len);
  107.   return buf;
  108. }
  109.  
  110. // Test program code starts here
  111. // *********************************************************** //
  112. int main()
  113. {
  114.   cout << "Constructing FString class objects..." << endl;
  115.   FString a("DOG");
  116.   FString b("CAT");
  117.   FString c("MOUSE");
  118.   FString d("BIRD");
  119.  
  120.   cout << "Testing copy constructor..." << endl;
  121.   FString e(a);  
  122.  
  123.   cout << "Testing assignment operator..." << endl;
  124.   a = b;
  125.  
  126.   cout << endl;
  127.   cout << "Testing overloaded << operator..."  << endl;
  128.   cout << a << ' ' << b  << ' ' << c  << ' ' << d << ' ' << e << endl;
  129.  
  130.   cout << endl;
  131.   cout << "Testing c_str() function..." << endl;
  132.   cout << a.c_str() << endl;
  133.   cout << b.c_str() << endl;
  134.   cout << c.c_str() << endl;
  135.   cout << d.c_str() << endl;
  136.   cout << e.c_str() << endl;
  137.  
  138.   cout << endl;
  139.   cout << "Testing overloaded >> operator..." << endl;
  140.   FString buf;
  141.   cout << "Enter a string up to " << Len << " characters long: ";
  142.   cin >> buf;
  143.  
  144.   cout << endl;
  145.   cout << "Data entered = " << buf << endl;
  146.  
  147.   cout << endl;
  148.   cout << "Testing FString boundaries..." << endl;
  149.   char *s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789";
  150.   FString x(s);
  151.   cout << "Alphabet string = " << x.c_str() << endl;
  152.   return 0;
  153. }  
  154. // ----------------------------------------------------------- // 
  155. // ------------------------------- //
  156. // --------- End of File --------- //
  157. // ------------------------------- //
  158.